﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using NangLuongTieuDiemDTO.DTO;

namespace NangLuongTieuDiemDAO.DAO
{
    public class ChiTietSanPhamHoaDonDAO
    {
        #region"[Insert]" 
        /// <summary>
        /// Thêm chi tiết sản phẩm trong hóa đơn
        /// </summary>
        /// <param name="ctspDto">đối tượng ChiTietSanPhamHoaDon</param>
        /// <returns>-1: Thêm thất bại, >-1: thêm thành công</returns>
        public static int Insert( ChiTietSanPhamHoaDonDTO ctspDto)
        {
            int iDResult = -1;
            try
            {
                // Mo ket noi
                SqlConnection cn = NangLuongTieuDiemDAO.DataHelper.SqlDataHelper.ConnectionData();

                // Chuoi sql thao tac csdl
                string strSQL = "insert into ChiTietSanPhamHoaDon(SanPhamID, HoaDonID, SoLuong, ThanhTien, Xoa, GhiChu) values(@SanPhamID, @HoaDonID, @SoLuong, @ThanhTien, @Xoa, @GhiChu)";

                // Thuc thi chuoi sql
                SqlCommand cmd = new SqlCommand(strSQL, cn);


                cmd.Parameters.Add("@SanPhamID", SqlDbType.Int);
                cmd.Parameters.Add("@HoaDonID", SqlDbType.Int);
                cmd.Parameters.Add("@SoLuong", SqlDbType.Int);
                cmd.Parameters.Add("@ThanhTien", SqlDbType.Decimal);
                cmd.Parameters.Add("@Xoa", SqlDbType.Bit);
                cmd.Parameters.Add("@GhiChu", SqlDbType.NText);

                cmd.Parameters["@SanPhamID"].Value = ctspDto.SanPhamID;
                cmd.Parameters["@HoaDonID"].Value = ctspDto.HoaDonID;
                cmd.Parameters["@SoLuong"].Value = ctspDto.SoLuong;
                cmd.Parameters["@ThanhTien"].Value = Convert.ToDecimal(ctspDto.ThanhTien);
                cmd.Parameters["@Xoa"].Value = ctspDto.Xoa;
                cmd.Parameters["@GhiChu"].Value = ctspDto.GhiChu;

                cmd.ExecuteNonQuery();

                // lay ID cua dong insert
                
                strSQL = "Select @@IDENTITY";
                cmd = new SqlCommand(strSQL, cn);
                iDResult = Convert.ToInt32(cmd.ExecuteScalar());

                // dong ket noi csdl
                cn.Close();
            }
            catch (Exception ex) 
            {
                InSert_LoiHeThong("Insert", ex);
            }
            return iDResult;
        }
        #endregion

        #region "[Update]"
        /// <summary>
        /// Cập nhật đối tượng ChiTietSanPhamHoaDon
        /// </summary>
        /// <param name="ctspDto">đối tượng ChiTietSanPhamHoaDon cần cập nhật</param>
        /// <returns>true: Cập nhật thành công, False: cập nhật thất bại</returns>
        public static bool Update(ChiTietSanPhamHoaDonDTO ctspDto)
        {
            SqlConnection cn;
            bool isSuccess = false;
            try
            {
                // Mo ket noi
                cn = NangLuongTieuDiemDAO.DataHelper.SqlDataHelper.ConnectionData();

                // Chuoi sql thao tac csdl
                string strSQL = "Update ChiTietSanPhamHoaDon Set SanPhamID = @SanPhamID, HoaDonID = @HoaDonID , SoLuong = @SoLuong , ThanhTien = @ThanhTien, Xoa = @Xoa, GhiChu = @GhiChu where ID = @ID and Xoa = 0";

                // Thuc thi chuoi sql
                SqlCommand cmd = new SqlCommand(strSQL, cn);


                cmd.Parameters.Add("@SanPhamID", SqlDbType.Int);
                cmd.Parameters.Add("@HoaDonID", SqlDbType.Int);
                cmd.Parameters.Add("@SoLuong", SqlDbType.Int);
                cmd.Parameters.Add("@ThanhTien", SqlDbType.Decimal);
                cmd.Parameters.Add("@Xoa", SqlDbType.Bit);
                cmd.Parameters.Add("@GhiChu", SqlDbType.NText);
                cmd.Parameters.Add("@ID", SqlDbType.Int);

                cmd.Parameters["@SanPhamID"].Value  = ctspDto.SanPhamID;
                cmd.Parameters["@HoaDonID"].Value   = ctspDto.HoaDonID;
                cmd.Parameters["@SoLuong"].Value    = ctspDto.SoLuong;
                cmd.Parameters["@ThanhTien"].Value  = Convert.ToDecimal(ctspDto.ThanhTien);
                cmd.Parameters["@Xoa"].Value        = ctspDto.Xoa;
                cmd.Parameters["@GhiChu"].Value     = ctspDto.GhiChu;
                cmd.Parameters["@ID"].Value         = ctspDto.ID;

                cmd.ExecuteNonQuery();

                // dong ket noi csdl
                cn.Close();
                isSuccess = true;

            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("Update", ex);
            }
            return isSuccess;
        }
        #endregion

        #region "[Delete]"
        /// <summary>
        /// Xóa 1 đối tượng ChiTietSanPhamHoaDon
        /// </summary>
        /// <param name="ID">mã đối tượng ChiTietSanPhamHoaDon cần xóa</param>
        /// <returns>true: xóa thành công, false: xóa thất bại</returns>
        public static bool Delete(int ID)
        {
            bool isSuccess = false;
            SqlConnection cn;
            try
            {
                // Mo ket noi
                cn = NangLuongTieuDiemDAO.DataHelper.SqlDataHelper.ConnectionData();

                // Chuoi sql thao tac csdl
                string strSQL = " Update ChiTietSanPhamHoaDon Set Xoa = 1 where ID = @ID";


                // Thuc thi chuoi sql
                SqlCommand cmd = new SqlCommand(strSQL, cn);

                cmd.Parameters.Add("@ID", SqlDbType.Int);
                cmd.Parameters["@ID"].Value = ID;


                cmd.ExecuteNonQuery();
                // dong ket noi csdl
                cn.Close();
                isSuccess = true;

            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("Delete", ex);
            }
            return isSuccess;
        }
        #endregion

        #region "[Get all]"
        /// <summary>
        /// lấy danh sách các đối tượng ChiTietSanPhamHoaDon
        /// </summary>
        /// <returns>danh sách các đối tượng ChiTietSanPhamHoaDon</returns>
        public static List<ChiTietSanPhamHoaDonDTO> GetAll()
        {
            List<ChiTietSanPhamHoaDonDTO> listResult = new List<ChiTietSanPhamHoaDonDTO>();
            try
            {
                SqlConnection cn;

                // Mo ket noi
                cn = NangLuongTieuDiemDAO.DataHelper.SqlDataHelper.ConnectionData();

                // Chuoi sql thao tac csdl
                string strSQL = " Select * From ChiTietSanPhamHoaDon where Xoa = 0";


                // Thuc thi chuoi sql
                SqlCommand cmd = new SqlCommand(strSQL, cn);

                SqlDataReader dr = cmd.ExecuteReader();

                while (dr.Read() == true)
                {
                    ChiTietSanPhamHoaDonDTO ctspDto = new ChiTietSanPhamHoaDonDTO();
                    ctspDto.ID = dr.GetInt32(0);
                    ctspDto.SanPhamID = dr.GetInt32(1);
                    ctspDto.HoaDonID = dr.GetInt32(2);
                    ctspDto.SoLuong = dr.GetInt32(3);
                    ctspDto.ThanhTien = Convert.ToDouble(dr.GetDecimal(4));
                    ctspDto.Xoa = dr.GetBoolean(5);
                    ctspDto.GhiChu = dr.GetString(6);

                    listResult.Add(ctspDto);
                }

                cn.Close();
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("GetAll", ex);
            }
            return listResult;
        }
        #endregion

        #region "[SelectByPrimaryKey]"
        /// <summary>
        /// Lấy 1 đối tượng ChiTietSanPhamHoaDon theo khóa chính
        /// </summary>
        /// <param name="ID">mã đối tượng ChiTietSanPhamHoaDon</param>
        /// <returns></returns>
        public static ChiTietSanPhamHoaDonDTO SelectByPrimaryKey(int ID)
        {
            ChiTietSanPhamHoaDonDTO ctspDto = null;
            try
            {
                SqlConnection cn;

                // Mo ket noi
                cn = NangLuongTieuDiemDAO.DataHelper.SqlDataHelper.ConnectionData();

                // Chuoi sql thao tac csdl
                string strSQL = " Select * From ChiTietSanPhamHoaDon where ID = @ID and Xoa = 0";


                // Thuc thi chuoi sql
                SqlCommand cmd = new SqlCommand(strSQL, cn);

                cmd.Parameters.Add("@ID", SqlDbType.Int);
                cmd.Parameters["@ID"].Value = ID;

                SqlDataReader dr = cmd.ExecuteReader();
                ctspDto = new ChiTietSanPhamHoaDonDTO();
                while (dr.Read() == true)
                {
                    ctspDto.ID = dr.GetInt32(0);
                    ctspDto.SanPhamID = dr.GetInt32(1);
                    ctspDto.HoaDonID = dr.GetInt32(2);
                    ctspDto.SoLuong = dr.GetInt32(3);
                    ctspDto.ThanhTien = Convert.ToDouble(dr.GetDecimal(4));
                    ctspDto.Xoa = dr.GetBoolean(5);
                    ctspDto.GhiChu = dr.GetString(6);
                }

                // Dong ket noi csdl
                cn.Close();
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("SelectByPrimaryKey", ex);
            }
            return ctspDto;
        }
        #endregion

        #region "[Hàm insert lỗi hệ thống]"
        public static void InSert_LoiHeThong(string TenHam, Exception ex)
        {
            LoiHeThongDTO lhtDto = new LoiHeThongDTO();
            lhtDto.TenLoi = ex.Message.ToString();
            lhtDto.NgayTao = DateTime.Now;
            lhtDto.TenHamBiLoi = "ChiTietSanPhamHoaDonDAO_" + TenHam;
            lhtDto.SuaLoi = false;
            lhtDto.GhiChu = "";
            LoiHeThongDAO.Insert(lhtDto);

        }
        #endregion
    }
}
